package com.cdhkppm.utils;

import com.hustcad.plm.pdm.iba.service.TyplmAttributeValueService;
import com.ty.basic.vo.AttributeVO;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.MapUtils;
import org.springframework.context.annotation.Configuration;

import javax.annotation.Resource;
import java.math.BigInteger;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Objects;

/**
 * IBA 属性工具类
 */

@Configuration
public class IbaAttributeUtils {

    @Resource
    private TyplmAttributeValueService typlmAttributeValueService;


    /**
     * 批量查询物料指定 IBA 属性
     *
     * @param ids           物料 ID 集合
     * @param typeDefName   类型定义名称
     * @param attrKeys      属性 KEY 列表
     * @return Map<物料ID, Map<属性Key, List<AttributeVO>>>
     */
    public Map<String, Map<String, List<AttributeVO>>> getAttributesByIds(List<BigInteger> ids,
                                                                          String typeDefName,
                                                                          List<String> attrKeys) {
        if (CollectionUtils.isEmpty(ids) || CollectionUtils.isEmpty(attrKeys)) {
            return Collections.emptyMap();
        }
        return typlmAttributeValueService.getAttrValueByOidAndKeys(ids, typeDefName, attrKeys);
    }

    /**
     * 获取某个物料的单个属性值（取第一个值）
     *
     * @param id         物料ID
     * @param typeDef    类型定义
     * @param attrKey    属性Key
     * @return 属性值（可能为 null）
     */
    public String getSingleAttrValue(BigInteger id, String typeDef, String attrKey) {
        Map<String, Map<String, List<AttributeVO>>> result =
                getAttributesByIds(Collections.singletonList(id), typeDef, Collections.singletonList(attrKey));
        if (MapUtils.isEmpty(result)) {
            return null;
        }
        Map<String, List<AttributeVO>> attrMap = result.get(id.toString());
        if (MapUtils.isEmpty(attrMap)) {
            return null;
        }
        List<AttributeVO> vos = attrMap.get(attrKey);
        if (CollectionUtils.isEmpty(vos)) {
            return null;
        }
        return vos.get(0).getAttributeValuex();
    }

    /**
     * 从属性列表中获取指定属性的值
     *
     * @param attributes       属性集合
     * @param targetEnName     目标属性英文名
     * @return                 找到返回值，没找到返回空字符串
     */
    public static String getAttributeValue(List<AttributeVO> attributes, String targetEnName) {
        if (attributes == null || attributes.isEmpty() || targetEnName == null) {
            return null;
        }
        return attributes.stream()
                .filter(attr -> targetEnName.equals(attr.getAttributeEnName()))
                .map(AttributeVO::getAttributeValuex)
                .filter(Objects::nonNull)
                .findFirst()
                .orElse(null);
    }
}
